/**
 * 剪贴板工具函数
 * 提供跨浏览器的复制功能
 */

/**
 * 复制文本到剪贴板
 * @param {string} text - 要复制的文本
 * @returns {Promise<boolean>} - 复制是否成功
 */
export async function copyToClipboard(text) {
  if (!text) {
    return false
  }

  // 方法1：现代浏览器的 Clipboard API (需要 HTTPS)
  if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {
    try {
      await navigator.clipboard.writeText(text)
      return true
    } catch (error) {
      console.log('Clipboard API 失败:', error)
      // 继续尝试其他方法
    }
  }

  // 方法2：传统的 document.execCommand 方法
  try {
    const textArea = document.createElement('textarea')
    textArea.value = text
    
    // 设置样式使其不可见
    textArea.style.position = 'fixed'
    textArea.style.left = '-999999px'
    textArea.style.top = '-999999px'
    textArea.style.opacity = '0'
    textArea.style.pointerEvents = 'none'
    textArea.style.zIndex = '-1'
    
    document.body.appendChild(textArea)
    
    // 选择文本
    textArea.focus()
    textArea.select()
    textArea.setSelectionRange(0, textArea.value.length)
    
    // 执行复制命令
    const successful = document.execCommand('copy')
    
    // 清理
    document.body.removeChild(textArea)
    
    if (successful) {
      return true
    }
  } catch (error) {
    console.log('execCommand 复制失败:', error)
  }

  return false
}

/**
 * 分享内容（优先使用原生分享，降级到复制链接）
 * @param {Object} options - 分享选项
 * @param {string} options.title - 分享标题
 * @param {string} options.text - 分享文本
 * @param {string} options.url - 分享链接
 * @returns {Promise<{success: boolean, method: string}>} - 分享结果
 */
export async function shareContent({ title, text, url }) {
  // 优先使用原生分享API
  if (navigator.share && typeof navigator.share === 'function') {
    try {
      await navigator.share({ title, text, url })
      return { success: true, method: 'native' }
    } catch (error) {
      // 用户取消分享或其他错误
      if (error.name === 'AbortError') {
        return { success: false, method: 'native', reason: 'cancelled' }
      }
      console.log('原生分享失败:', error)
    }
  }

  // 降级到复制链接
  const copySuccess = await copyToClipboard(url)
  return { 
    success: copySuccess, 
    method: 'clipboard',
    reason: copySuccess ? null : 'copy_failed'
  }
}

/**
 * 检查是否支持剪贴板操作
 * @returns {boolean} - 是否支持
 */
export function isClipboardSupported() {
  return !!(
    (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') ||
    (document.queryCommandSupported && document.queryCommandSupported('copy'))
  )
}

/**
 * 检查是否支持原生分享
 * @returns {boolean} - 是否支持
 */
export function isNativeShareSupported() {
  return !!(navigator.share && typeof navigator.share === 'function')
}
